package lp2.projeto.agenda;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;

import lp2.projeto.database.Database;
import lp2.projeto.gerenciador.*;
import lp2.projeto.anotacao.*;

public class ImagemJDialog extends JDialog {
	private static final long serialVersionUID = -7024181691667390331L;
	private JPanel imagemJPanel;
	private JLabel nomeJLabel;
	private JLabel imagemJLabel;
	private JComboBox imagemJComboBox;
	private ImageIcon icon;
	private JButton adicionaImagemJButton;
	private JButton voltarJButton;
	private JButton removerJButton;
	private JTextField imagemJTextField;
	protected Anotacao anotacao;
	
	public ImagemJDialog(Anotacao anotacao_arg, Dialog owner_arg){
		super(owner_arg,true);
		imagemJPanel = (JPanel) this.getContentPane();
		imagemJPanel.setLayout(new GridBagLayout());
		this.anotacao = anotacao_arg;
		GridBagConstraints constraints = new GridBagConstraints();
		
		setSize(600, 600);
		
		nomeJLabel = new JLabel("Imagens do Evento                       ");
		try {
			icon = new ImageIcon( redimensionaImagem(600, 350, new File("selecione.png")));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		imagemJLabel = new JLabel(icon);
		
		if (anotacao == null)	imagemJComboBox = new JComboBox();
		else {
			imagemJComboBox = new JComboBox();
			for (Imagem imagem : anotacao.getImagens()) imagemJComboBox.addItem(imagem);
		}
		imagemJComboBox.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					if (imagemJComboBox.getSelectedItem() == null){
						icon = new ImageIcon( redimensionaImagem(600, 350, new File("selecione.png")));
						imagemJLabel.setIcon(icon);
					} else {
						Imagem imagem = (Imagem)imagemJComboBox.getSelectedItem();
						
						final String arquivo_temporario = "temporario" + Database.getExtensao(imagem.getNome());
						 
						OutputStream os = new BufferedOutputStream(new FileOutputStream(new File(arquivo_temporario)));
						os.write(imagem.getConteudo());
						os.close();
												
						ImageIcon icon = new ImageIcon(redimensionaImagem(600, 350, new File(arquivo_temporario)));
						
						imagemJLabel.setIcon(icon);
					}	
				} catch (Exception e) {		
					e.printStackTrace();
				}
				
			}
		});
		
		
		voltarJButton = new JButton("Voltar");
		voltarJButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				fechar();		
			}
		});
		
		adicionaImagemJButton = new JButton("Adiciona nova Imagem");
		
		adicionaImagemJButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					Imagem imagem = new Imagem(imagemJTextField.getText(), Database.lerArquivo(imagemJTextField.getText()));
					
					final String arquivo_temporario = "temporario" + Database.getExtensao(imagem.getNome());
					 
					OutputStream os = new BufferedOutputStream(new FileOutputStream(new File(arquivo_temporario)));
					os.write(imagem.getConteudo());
					os.close();					
					
					icon = new ImageIcon(redimensionaImagem(600, 350, new File(arquivo_temporario)));
					imagemJLabel.setIcon(icon);
					imagemJComboBox.addItem(imagem);
					anotacao.getImagens().add(imagem); // TODO: Deixar isso mais elegante
				} catch (Exception e1) {
					JDialog avisoURL = new avisoJDialog("Url nao encontrada, ou impossivel criar arquivo temporario");
					avisoURL.setSize(new Dimension(150,100));
					avisoURL.setVisible(true);       
					
				}
				
			}
		});
		
		removerJButton = new JButton("Remover Imagem");
		removerJButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (imagemJComboBox.getSelectedIndex() != -1) {
					Imagem imagem = (Imagem)imagemJComboBox.getSelectedItem();
					
					anotacao.getImagens().remove(imagem); // TODO: Deixar isso mais elegante
					
					imagemJComboBox.removeItemAt(imagemJComboBox.getSelectedIndex());
					
				}
				else { 
					JDialog avisoURL = new avisoJDialog("Selecione um item da lista");
					avisoURL.setSize(new Dimension(250,100));
					avisoURL.setVisible(true);
					
				}
			}
		});
		
		imagemJTextField = new JTextField("Digite a URL da Imagem");
		
		constraints.insets = new Insets(5,5,5,5);
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.anchor = GridBagConstraints.CENTER;
		constraints.gridx = 1;
		constraints.gridx = 1;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		constraints.weightx = 0.1;
		JPanel nomeJPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		nomeJPanel.add(nomeJLabel);
		imagemJPanel.add(nomeJPanel,constraints);
		
		constraints.fill = GridBagConstraints.BOTH;
		constraints.gridx = 0;
		constraints.gridy = 1;
		constraints.gridwidth = 3;
		constraints.gridheight = 4;
		constraints.weightx = 0.1;
		imagemJPanel.add(imagemJLabel,constraints);
		
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridx = 0;
		constraints.gridy = 5;
		constraints.gridwidth = 2;
		constraints.gridheight = 1;
		constraints.weightx = 0;
		imagemJPanel.add(imagemJComboBox,constraints);
		
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridx = 2;
		constraints.gridy = 5;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		constraints.weightx = 0;
		imagemJPanel.add(removerJButton,constraints);
		
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridx = 0;
		constraints.gridy = 6;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		constraints.weightx = 0;
		imagemJPanel.add(adicionaImagemJButton,constraints);
		
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridx = 1;
		constraints.gridy = 6;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		constraints.weightx = 0;
		imagemJPanel.add(imagemJTextField,constraints);
		
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridx = 2;
		constraints.gridy = 6;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		constraints.weightx = 0;
		imagemJPanel.add(voltarJButton,constraints);
		
	}
	private void fechar(){
		this.dispose();
	}
	
	private BufferedImage redimensionaImagem(int x, int y, File arquivo) throws Exception{
		BufferedImage new_image;
		int new_X = x, new_Y = y;
		try{
			BufferedImage imagem = ImageIO.read(arquivo);		
			new_image = new BufferedImage(new_X,new_Y, BufferedImage.TYPE_INT_RGB);
			Graphics2D grafic = new_image.createGraphics();
			grafic.drawImage(imagem, 0, 0, new_X,new_Y, null);
		}catch(IOException erro){
			throw new Exception(erro.getMessage());
		}
		return new_image;
	}
	
	public static void main(String[] args) {
		ImagemJDialog bla = new ImagemJDialog(new Anotacao(""), null);
		bla.setVisible(true);
	}
}
